# -*- coding: utf-8 -*-            
# @Author : HJH
# @Time : 2024/1/22 14:58
# @Use : 美团上传单程预付政策

class Policy:
    def __init__(
            self,
            flightcode: str = None,
            policyCode: str = None,
            dpt: str = None,
            arr: str = None,
            flightNumLimit: str = None,
            flightcondition: str = None,
            daycondition: str = None,
            cabin: str = None,
            discountType: str = None,
            discountValue: str = None,
            returnpoint: str = None,
            returnPointCalMode: str = None,
            returnprice: str = None,
            startdate_ticket: str = None,
            enddate_ticket: str = None,
            startdate: str = None,
            enddate: str = None,
            earliestBeforeValidDay: str = None,
            beforeValidDay: str = None,
            cabinnote: str = None,
            needPnr: str = None,
            pnrStrategy: str = None,
            tightSeatCount: str = None,
            pata: str = None,
            productTypeList: str = None,
            discountThreshhold: str = None
    ):
        """
        该节点描述需要新增的政策内容
        """
        """
            航空公司 是
            航空公司二字码，必须大写，只支持一个航空公司
        """
        self.flightcode = flightcode
        """
            政策标识 否
            代理商内部政策代码，用于标识内部的政策
        """
        self.policyCode = policyCode
        """
            起飞机场 是
            出发机场三字代码，大写且只支持单个出发机场
        """
        self.dpt = dpt
        """
            到达机场 是
            到达机场三字码，大写且只支持单个目的机场
        """
        self.arr = arr
        """
            航班限制 是
            航班限制，取值如下：所有、适用、不适用
        """
        self.flightNumLimit = flightNumLimit
        """
            航班号 否
            1.航班限制为所有则不填
            2.适用则填写适用航班号，多个用英文
            的“,”分隔，最多不超过 50 个航班号
            3.航班号需要与可售卖的航空公司保持一致。
            4.不适用则填写不适用航班号
        """
        self.flightcondition = flightcondition
        """
            旅行班期 是
            1234567 表示周一、周二、周三、周四、周五、周六、周日，不能为空
        """
        self.daycondition = daycondition
        """
            舱位 是 不支持多舱位录入。
        """
        self.cabin = cabin
        """
            票面价类型 是
            取值如下：
            1. 指定票面价
            2. Y 舱折扣
            普通政策，此处取“指定票面价”
        """
        self.discountType = discountType
        """
            票面价/折扣 是
            如果票面价类型为“指定票面价”此处填写票面价信息(普通政策填写 0)，
            如果为“Y 舱折扣”则填写折扣信息（如 0.85表示 85 折）。
        """
        self.discountValue = discountValue
        """
            返点 是 5.5 表示返 5.5 个点
        """
        self.returnpoint = returnpoint
        """
            返点计算模式 否
            填数字，向下取整、四舍五入到十位、四舍五入到个位、向上取整到十位，请填写具体的数字信息
            计算示例：
            1 :向下取整：向下取整 681.5 -> 681
            2:四舍五入到十位：681.5 -> 680
            3:四舍五入到个位：681.5 -> 682
            4:向上取整到十位：681.5 -> 690
        """
        self.returnPointCalMode = returnPointCalMode
        """
            留钱 是 支持正负整数
        """
        self.returnprice = returnprice
        """
            销售起始日期 是 格式为 yyyy-MM-dd
        """
        self.startdate_ticket = startdate_ticket
        """
            销售结束日期 是格式为 yyyy-MM-dd，日期不能早于销售起始日期
        """
        self.enddate_ticket = enddate_ticket
        """
            旅行起始日期 是 格式为 yyyy-MM-dd
        """
        self.startdate = startdate
        """
            旅行结束日期 是 格式为 yyyy-MM-dd，日期不能早于旅行起始日期
        """
        self.enddate = enddate
        """
            最早提前销售天数 否 只能输入整数，且必须大于等于 0。
            例如：最早提前销售天数为 60，用户最早可以在起飞前 60 天预订机票。
        """
        self.earliestBeforeValidDay = earliestBeforeValidDay
        """
            最晚提前销售天数 否 只能输入整数，且必须大于等于 0。
            例如：最晚提前销售天数为 1，用户最晚可以在起飞前 1 天预订机票。
        """
        self.beforeValidDay = beforeValidDay
        """
            舱位说明 是 最大不超过 255 个字符
        """
        self.cabinnote = cabinnote
        """
            是否生成 PNR 是 1 是,0 否，默认为 1 是
        """
        self.needPnr = needPnr
        """
            紧俏座位具体策略 否 0: 不生编 1: 生编 2: 禁售 
            如：紧俏座位具体策略为 0，紧俏座位阈值为 3，则实际座位数小于等于 3 时不生成 PNR。
            大于 3 时按【是否生成PNR】决定进单是否生编
        """
        self.pnrStrategy = pnrStrategy
        """
            紧俏座位阈值 否 支持 1 到 9 的整数，默认为 1。
            以下 3 个场景为必填： 
            1）若【是否生成 PNR】为“是”，且 【紧俏座位阈值】为“禁售”
            2）若【是否生成 PNR】为“否”，且【紧俏座位阈值】为“生成 PNR”
            3）若【是否生成 PNR】为“否”，且【紧俏座位阈值】为“禁售”
        """
        self.tightSeatCount = tightSeatCount
        """
            是否 PATA 验价 是 1 是,0 否，默认为 1 是
        """
        self.pata = pata
        """
            产品类型 是 B 端产品 ID，支持多个 B 端产品 ID，中间用英文逗号“,”隔开
        """
        self.productTypeList = productTypeList
        """
            追加阈值金额 否 选填；单位元，支持大于等于 0 的整数，
            如：10，代表追加阈值 10 元。当追加阈值比例和追加阈值金额同时有值时，取两者之和做为实际的追加阈值。
        """
        self.discountThreshhold = discountThreshhold


class PolicyList:
    def __init__(
            self,
            username: str = None,
            password: str = None,
            execType: str = None,
            type: str = None
    ):
        """
        该节点定义新增政策的类型并出示用户名和密码
        """
        """
            用户名 是 政策上传的用户名
        """
        self.username = username
        """
            密码	是 政策上传的密码
        """
        self.password = password
        """
            上传类型 是
            只能取 ADD、FULL
            ADD 表示增量上传 FULL 表示全量上传（全量上传会删除=以前的政策）
            全量上传需要间隔 20 分钟，增量上传=需要间隔 2 分钟；全量上传一次不超过=20万条数据，增量上传一次不超过5万条数据
        """
        self.execType = execType
        """
            政策类型
            COMMON 表示普通政策
            CUSTOMER 表示包机切位政策
            PREPAY 表示预付政策
        """
        self.type = type


class DeletePolicy:
    def __init__(
            self,
            policyCode: str = None,
            type: str = None
    ):
        """
        该节点定义新增政策的类型并出示用户名和密码
        """
        """
            政策类型 是 存在 DeletePolicy 节点时必填。
            COMMON 表示普通政策
            PREPAY 表示预付政策
            APPLY 表示 K 位政策
            CUSTOMER 表示团队政策
            LOWPRICE 表示特价政策
            ROUNDPREPAY 往返预付政策
            ROUNDSPECIAL 往返特价政策
            SINGLEALL 单程所有类型政策
            ROUNDALL 往返所有类型政策
        """
        self.type = type
        """
            政策标识	否	代理商内部政策代码，用于标识内部的政策
        """
        self.policyCode = policyCode
